let  j :object;
j = {}
j = function (){}
// 不实用 一般项目中不用

let k : {name:string}
// k = {}           //报错
k = {name:'xiaoming'}
// k = {name:123}   //报错

// {}用来指定对线中可以包含哪些属性
// 声明的时候 有多少属性，你赋值的时候就得有多少属性 多一个不行 少一个 也不行
// 在属性名后边加上 ? 表示赋值的时候有这个值可以 没有 也可以
let l : {name:string,age?:number}
l = {name:'xiaoming'}
// propName 随便写 表示属性名
// string 表示属性名的类型
// any 表示类型
let m : {name:string,[propName:string]:any}
m = {name:'xiaoming',age:12}


let n : string[]
n = ['h','e','l']

let o : Array<number>
o = [1,2,3,4]

let p :[string,number,boolean]
p = ['张三',18,true]

enum Gender{
    male = 0 ,
    feamle = 1
}
let q :{name:string,gender:Gender}
q = {name:'xiaoming',gender:Gender.male}
q.gender = Gender.feamle  //true


let r : {name:string}&{age:number}
r = {name:'xiaoming',age:12}

// let mytype = string
// let s : mytype  
// s = 'xiaoming'

// let t = 1|2|3|4|5|6
// let second:t
